﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sauvegarde
{

    /**
    * @author PAN
    * @date Juin 2010
    * @brief La classe ManipulationChaine propose des méthodes pour manipuler les chaînes de caractères représentant des adresses de fichier 
    */
    class ManipulationChaine
    {

        /**
          * longueurPan(String cheminAbsolu)
          *
          * @brief : calcule la longueur du nom du fichier et de son extension
          * @param : String cheminAbsolu adresse absolu sur le disque (chemin + nom du fichier + extension)
          * @return : int
          */
        public static int longueurPan(String cheminAbsolu)
        {
            int n = cheminAbsolu.Length;
            char c = cheminAbsolu[n - 1];
            while (c != '\\')
            {
                n--;
                c = cheminAbsolu[n];
            }
            int a = n + 1;
            return cheminAbsolu.Length - a;
        }

        /**
          * longueurExtnsion(String cheminAbsolu)
          *
          * @brief : calcule la longueur du chemin d'un fichier
          * @param : String cheminAbsolu adresse absolu sur le disque (chemin + nom du fichier + extension)
          * @return : int
          */
        public static int longueurExtnsion(String cheminAbsolu)
        {
            int a = longueurPan(cheminAbsolu);
            int n = cheminAbsolu.Length;
            return cheminAbsolu.Length - a;

        }

        /**
          * extension(String cheminAbsolu)
          *
          * @brief : rend l'extension d'un fichier
          * @param : String cheminAbsolu adresse absolu sur le disque (chemin + nom du fichier + extension)
          * @return : String
          */
        public static String extension(String cheminAbsolu)
        {
            int n = longueurPan(cheminAbsolu);
            int a = longueurExtnsion(cheminAbsolu);
            String ext = cheminAbsolu.Remove(a - 1, n + 1);
            return ext;
        }

        /**
          * fichierPan(String cheminAbsolu)
          *
          * @brief : rend le nom du fichier suivi de son extension
          * @param : String cheminAbsolu adresse absolu sur le disque (chemin + nom du fichier + extension)
          * @return : String
          */
        public static String fichierPan(String cheminAbsolu)
        {
            int n = longueurPan(cheminAbsolu);
            int a = longueurExtnsion(cheminAbsolu);
            String pan = cheminAbsolu.Remove(0, a);
            return pan;
        }

        //retourne le nom du fichier sans l'extension .pan
        /**
          * nomFichier(String cheminAbsolu)
          *
          * @brief : rend le nom du fichier (sans son extension)
          * @param : String cheminAbsolu adresse absolu sur le disque (chemin + nom du fichier + extension)
          * @return : String
          */
        public static String nomFichier(String cheminAbsolu)
        {
            String fich;
            String Chainetemp = fichierPan(cheminAbsolu);
            int n = Chainetemp.Length;
            fich = Chainetemp.Remove(n-4, 4);
            return fich;
        }

    }
}
